home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / gnu / amiga / sipp.lha / sipp / demo / prismtest.c < prev    next >
C/C++ Source or Header  |  1993-03-13  |  3KB  |  113 lines

  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. #include <sipp.h>
  5. #include <primitives.h>
  6.  
  7.  
  8. /* The XY coordinats for a 3-sided prism. */
  9. Vector   prism3[3] = {
  10.     { 1.0  -1.0, 0.0}, 
  11.     {-1.0,  2.0, 0.0}, 
  12.     {-2.0, -1.0, 0.0}
  13. };
  14.  
  15. /* The XY coordinats for a 5-sided prism. */
  16. Vector   prism5[5] = {
  17.     { 0.5  -1.0, 0.0}, 
  18.     {-1.0,  0.5, 0.0}, 
  19.     { 1.0,  1.0, 0.0}, 
  20.     {-1.0,  2.0, 0.0}, 
  21.     {-2.0,  0.5, 0.0}
  22. };
  23.  
  24. extern char *optarg;
  25.  
  26. main(argc, argv)
  27.     int    argc;
  28.     char **argv;
  29. {
  30.     FILE      * fp ;
  31.     Object    * prism3_obj;
  32.     Object    * prism5_obj;
  33.     Surf_desc   surf;
  34.  
  35.     char    *imfile_name;
  36.     int      mode;
  37.     int      c;
  38.     int      size;
  39.  
  40.     imfile_name = "prism.ppm";
  41.     mode = PHONG;
  42.     size = 256;
  43.  
  44.     while ((c = getopt(argc, argv, "pgfls:")) != EOF) {
  45.         switch (c) {
  46.           case 'p':
  47.             mode = PHONG;
  48.             imfile_name = "prism.ppm";
  49.             break;
  50.  
  51.           case 'g':
  52.             mode = GOURAUD;
  53.             imfile_name = "prism.ppm";
  54.             break;
  55.  
  56.           case 'f':
  57.             mode = FLAT;
  58.             imfile_name = "prism.ppm";
  59.             break;
  60.  
  61.           case 'l':
  62.             mode = LINE;
  63.             imfile_name = "prism.pbm";
  64.             break;
  65.  
  66.           case 's':
  67.             size = atoi(optarg);
  68.             break;
  69.         }
  70.     }
  71.  
  72.     sipp_init();
  73.  
  74.     lightsource_create(1.0, 1.0, 1.0, 0.9, 0.9, 0.9, LIGHT_DIRECTION);
  75.     lightsource_create(-1.0, -1.0, 0.5, 0.4, 0.4, 0.4, LIGHT_DIRECTION);
  76.  
  77.     surf.ambient = 0.5;
  78.     surf.specular = 0.6;
  79.     surf.c3 = 0.2;
  80.     surf.color.red = 1.0000;    /* light salmon */
  81.     surf.color.grn = 0.6275;
  82.     surf.color.blu = 0.4784;
  83.     surf.opacity.red = 1.0;
  84.     surf.opacity.grn = 1.0;
  85.     surf.opacity.blu = 1.0;
  86.  
  87.     /* The 3-sided prism */
  88.     prism3_obj = sipp_prism(3, &prism3[0], 4.0, &surf, basic_shader, WORLD);
  89.     object_move(prism3_obj, -3.0, 0.0, 0.0);
  90.     object_add_subobj(sipp_world, prism3_obj);
  91.  
  92.     /* The 5-sided prism */
  93.     prism5_obj = sipp_prism(5, &prism5[0], 5.0, &surf, basic_shader, WORLD);
  94.     object_move(prism5_obj, 3.0, 0.0, 0.0);
  95.     object_add_subobj(sipp_world, prism5_obj);
  96.  
  97.     /* The block (a 4 sided prism)  */
  98.     object_add_subobj(sipp_world, sipp_block(1.0, 2.0, 3.0, &surf,
  99.                                              basic_shader, WORLD));
  100.  
  101.     camera_params(sipp_camera, 5.0, -10.0, 6.0,  0.0, 0.0, 0.0,  
  102.                   0.0, 0.0, 1.0,  0.4);
  103.  
  104.     printf("Rendering, wait...");
  105.     fflush(stdout);
  106.  
  107.     fp = fopen(imfile_name, "w");
  108.     render_image_file(size, size, fp, mode, 2);
  109.     printf("Done.\n");
  110.  
  111.     exit(0);
  112. }
  113.